Турецкие символы сохраняются в базе данных в неправильном формате при использовании элемента управления Angular textarea - PullRequest
0 голосов
/ 09 октября 2018

Я заметил, что турецкие символы сохраняются по-разному, в зависимости от используемого элемента управления HTML-элемента (правильно для textarea, неправильно для input).

Я использую следующие символы для своего теста: ÖŞĞÜİÇ öşğüıç

Ниже приведен мой HTML-код для элементов управления input и textarea (ничего особенного):

<div class="col-md-12">
    <div class="row defMarginBottom">
        <div class="col-md-6">
            <label>Mesaj Konusu</label>
            <input type="text" class="form-control" placeholder="Konu"
                   ng-model="titleText" />
        </div>
    </div>
    <div class="row defMarginBottom">
        <div class="col-md-3">
            <label>İnternet Adresi Konusu</label>
            <input type="text" class="form-control"
                   placeholder="İnternet Adresi Konusu"
                   ng-model="additionalDataSubject" />
        </div>
        <div class="col-md-3 defMarginLeft1_3">
            <label>İnternet Adresi Linki</label>
            <input type="text" class="form-control"
                   placeholder="İnternet Adresi Linki"
                   ng-model="additionalDataLink" />
        </div>
    </div>
    <div class="row defMarginBottom">
        <div class="col-md-6">
            <label>Mesaj</label>
            <textarea class="form-control defHeight"
                      placeholder="Mesaj" ng-model="message">
            </textarea>
        </div>
    </div>
    <div class="row">
        <input style="margin-left:1.5%;" type="button"
               class="btn btn-success" value="Kaydet ve Gönder"
               ng-click="saveAndSend()" />
    </div>

</div>

Ниже приведен код углового контроллера, в котором определены модели ng:

var jsonObj = {
    "Subject": $scope.additionalDataSubject,
    "Link": $scope.additionalDataLink
};

var obj = {
    "ActivityTypeIds": activityTypeIdList,
    "SalesPersonID": $scope.salesPersonId,
    "SalesPersons": $scope.spIdList,
    "CustomerCategories": categoryIdList,
    "customerName": $scope.customerName,
    "StartDate": $scope.startDate,
    "EndDate": $scope.endDate,
    "TitleText": $scope.titleText,
    "Message": $scope.message,
    "AdditionalData": JSON.stringify(jsonObj)
};

При вводе тестовых строк в базу данных корректно сохраняются только те, которые для элементов управления textarea.

Эти элементы управления input неправильно сохранены как: &#214;&#350;&#286;&#220;&#304;&#199; &#246;&#351;&#287;&#252;&#305;&#231;

Примечание. Недавно я добавил следующую новую директиву в мое приложение Angular в качестве защиты от атак XSS, и подозрительноэто вызывает проблему, но поскольку записи для textarea сохранены правильно, я не уверен, что это связано.

.directive('input',['$sanitize', function ($sanitize) {
    return {
        restrict: 'E',
        require: '?ngModel',
        link: function (scope, element, attrs, ngModel) {
            if (ngModel !== undefined && ngModel != null) {
                ngModel.$parsers.push(function (value) {
                    return $sanitize(value);
                });
            }
        }
    };
}]);

Как я могу решить эту проблему?Большинство вопросов здесь, касающихся SO, касаются рендеринга турецких символов, а не их сохранения.

...